/**
 * 显示分页按钮
 * 
 * 1. 调用page对象的show方法传入需要显示的对象，和当前信息
 * 2. 调用page对象的ajax方法闯入需要显示的对象、当前信息和点击分页按钮需要执行的方法
 * 
 * @author Yan
 */
(function (){
	
	var page = {};
	
	page.target;
	page.attr = {
		url : '',
		ajax : false,
		callback : ''
	};
	
	/**
	 * 显示分页按钮
	 * 
	 * @param attr   该对象应当包括id(当前页码), count(总页数), url(点击按钮的连接地址)
	 * @param target 需要将这些按钮显示在页面的位置
	 */
	page.show = function(attr, target) {
		if(!target || !attr || attr.count < 2) {
			return;
		}
		
		this.target = target;
		simple(target).html('');
		
		if(attr.url) {
			var url = attr.url;
			if(!this.attr.ajax) {
				url = attr.url.replace(/\\/ig, '/');
				var loc = location.href;
				url += url.indexOf('?') == -1 ? '?' : '&';
				
				if(loc.indexOf('?') != -1) {
					url += loc.substr(loc.indexOf('?') + 1);
					if(url.indexOf('&p=') != -1) {
						url = url.substring(0, url.indexOf('&p='));
					}
				}
			}
			if(url.substring(url.length - 1,url.length) != '&') {
				url += '&';
			}
			this.attr.url = url;
		}
		
		attr.id = parseInt(attr.id);
		attr.count = parseInt(attr.count);
		
		var holder = simple.create('div', null, 'holder');
		simple.append(page.target, holder);
		this.target = holder;
		
		createPage(attr);
		
		showPageCount(attr);
	}
	
	/**
	 * 自定义按钮事件显示分页按钮
	 * 
	 * @param attr   该对象应当包括id(当前页码), count(总页数)
	 * @param target 需要将这些按钮显示在页面的位置
	 * @param callback 点击分页按钮需要执行的JavaScript回调方法
	 */
	page.ajax = function(attr, target, callback) {
		this.attr.ajax = true;
		attr.url = 'javascript: void(0)';
		if(callback) {
			this.attr.callback = callback;
		}
		this.show(attr, target);
	}
	
	// 创建分页链接
	function createPage(attr) {
		var temp = attr.id - 1;
		createLabel('上一页', 'prev', temp < 1 ? 1 : temp);
		
		if (attr.count <= 13) {
			for (var i = 1; i <= attr.count; i++) {
				createLink(i, i, i == attr.id);
			}
		} else {
			if (attr.id < 8) {
				for (var i = 1; i <= 10; i++) {
					createLink(i, i, i == attr.id);
				}
				createSpan('...');
				createLink(attr.count, attr.count);
			} else if (attr.count - attr.id < 8) {
				createLink(1, 1);
				createSpan('...');
				for (var i = attr.count - 10; i <= attr.count; i++) {
					createLink(i, i, i == attr.id);
				}
			} else {
				createLink(1, 1);
				createSpan('...');
				for (var i = attr.id - 4; i <= attr.id + 4; i++) {
					createLink(i, i, i == attr.id);
				}
				createSpan('...');
				createLink(attr.count, attr.count);
			}
		}
		
		temp = attr.id + 1;
		createLabel('下一页', 'next', temp >= attr.count ? attr.count : temp);
	}
	
	function showPageCount(attr) {
		var label = simple.create('span', null, 'number');
		simple.append(page.target, label);
		
		label = simple(label);
		label.html('<font style="vertical-align: middle;">共' + attr.count + '页  &nbsp; 跳到第</font><input type="text" title="指定页码" style="width:30px;vertical-align: middle;" id="jumpto" name="jumpto" maxlength="4" value="' + attr.id + '" /><font style="vertical-align: middle;">页</font>');
	}
	
	function createLabel(text, clsName, id) {
		var label = simple.create('span', null, clsName);
		simple.append(page.target, label);
		page.target = label;
		
		createLink(text, id);
		page.target = label.parentNode;
	}
	
	function createSpan(text) {
		var span = simple.create('span');
		span.innerHTML = text;
		simple.append(page.target, span);
	}
	
	function createLink(text, id, curr) {
		var link = simple.create('a', !curr ? {href:page.attr.url} : null, !curr ? null : 'now');	
		simple.append(page.target, link);
		link = simple(link);
		link.html(text);

		if(!page.attr.ajax && !curr) {
			link.attr('href', link.attr('href') + 'p=' + id);
			return;
		}
		if(page.attr.callback) {
			link.click(function() {
				page.attr.callback(id)
			});
		}
	}
	
	if(!window.page){window.page = page;}
	
})();